<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    
    <title>BLOG | jouyouyun&#39;s blog</title>
    <meta name="viewport" content="width=device-width,minimum-scale=1">
    <meta name="description" content="jouyouyun&#39;s blog.">
    <meta name="generator" content="Hugo 0.105.0">
    
    
    
    
      <meta name="robots" content="noindex, nofollow">
    

    
<link rel="stylesheet" href="/ananke/css/main.min.css" >



    
    
    
      

    

    
    
      <link href="/categories/blog/index.xml" rel="alternate" type="application/rss+xml" title="jouyouyun&#39;s blog" />
      <link href="/categories/blog/index.xml" rel="feed" type="application/rss+xml" title="jouyouyun&#39;s blog" />
      
    
    
    <meta property="og:title" content="BLOG" />
<meta property="og:description" content="jouyouyun&#39;s blog." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jouyouyun.github.io/categories/blog/" />

<meta itemprop="name" content="BLOG">
<meta itemprop="description" content="jouyouyun&#39;s blog."><meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="BLOG"/>
<meta name="twitter:description" content="jouyouyun&#39;s blog."/>

	
  </head>

  <body class="ma0 avenir bg-near-white">

    

  <header>
    <div class="pb3-m pb6-l bg-black">
      <nav class="pv3 ph3 ph4-ns" role="navigation">
  <div class="flex-l justify-between items-center center">
    <a href="/" class="f3 fw2 hover-white no-underline white-90 dib">
      
        jouyouyun&#39;s blog
      
    </a>
    <div class="flex-l items-center">
      

      
        <ul class="pl0 mr3">
          
          <li class="list f5 f4-ns fw4 dib pr3">
            <a class="hover-white no-underline white-90" href="/post/" title="Archives 页">
              Archives
            </a>
          </li>
          
          <li class="list f5 f4-ns fw4 dib pr3">
            <a class="hover-white no-underline white-90" href="/tags/" title="Tags 页">
              Tags
            </a>
          </li>
          
          <li class="list f5 f4-ns fw4 dib pr3">
            <a class="hover-white no-underline white-90" href="/categories/" title="Categories 页">
              Categories
            </a>
          </li>
          
        </ul>
      
      
<div class="ananke-socials">
  
    <a href="https://github.com/jouyouyun" target="_blank" class="github ananke-social-link link-transition stackoverflow link dib z-999 pt3 pt0-l mr1" title="GitHub link" rel="noopener" aria-label="follow on GitHub——Opens in a new window">
      
        <span class="icon"><svg style="enable-background:new 0 0 512 512;" version="1.1" viewBox="0 0 512 512"  xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
  <path d="M256,32C132.3,32,32,134.8,32,261.7c0,101.5,64.2,187.5,153.2,217.9c11.2,2.1,15.3-5,15.3-11.1   c0-5.5-0.2-19.9-0.3-39.1c-62.3,13.9-75.5-30.8-75.5-30.8c-10.2-26.5-24.9-33.6-24.9-33.6c-20.3-14.3,1.5-14,1.5-14   c22.5,1.6,34.3,23.7,34.3,23.7c20,35.1,52.4,25,65.2,19.1c2-14.8,7.8-25,14.2-30.7c-49.7-5.8-102-25.5-102-113.5   c0-25.1,8.7-45.6,23-61.6c-2.3-5.8-10-29.2,2.2-60.8c0,0,18.8-6.2,61.6,23.5c17.9-5.1,37-7.6,56.1-7.7c19,0.1,38.2,2.6,56.1,7.7   c42.8-29.7,61.5-23.5,61.5-23.5c12.2,31.6,4.5,55,2.2,60.8c14.3,16.1,23,36.6,23,61.6c0,88.2-52.4,107.6-102.3,113.3   c8,7.1,15.2,21.1,15.2,42.5c0,30.7-0.3,55.5-0.3,63c0,6.1,4,13.3,15.4,11C415.9,449.1,480,363.1,480,261.7   C480,134.8,379.7,32,256,32z"/>
</svg>
</span>
      
<span class="new-window"><svg  height="8px"  style="enable-background:new 0 0 1000 1000;" version="1.1" viewBox="0 0 1000 1000"  xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
<path d="M598 128h298v298h-86v-152l-418 418-60-60 418-418h-152v-86zM810 810v-298h86v298c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-596c0-46 38-86 86-86h298v86h-298v596h596z" style="fill-rule:evenodd;clip-rule:evenodd;"/>
</svg>
</span></a>
  
</div>

    </div>
  </div>
</nav>

      <div class="tc-l pv3 ph3 ph4-ns">
        <h1 class="f2 f-subheadline-l fw2 light-silver mb0 lh-title">
          BLOG
        </h1>
        
      </div>
    </div>
  </header>


    <main class="pb7" role="main">
      
  <article class="cf pa3 pa4-m pa4-l">
    <div class="measure-wide-l center f4 lh-copy nested-copy-line-height nested-links mid-gray">
      <p>标签为“BLOG”的页面如下</p>
    </div>
  </article>
  <div class="mw8 center">
    <section class="flex-ns flex-wrap justify-around mt5">
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 25, 2021
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/audit-usage/" class="link black dim">
        audit 简单使用
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><code>audit</code> 是 <code>linux</code> 下的审计系统，包含内核模块和系统服务。可使用 <code>audit</code> 对文件变更、系统调用、任务创建、用户事件等进行审计。</p>
<p>可使用 <code>sudo auditctl -s</code> 获取内核审计模块的状态，可使用 <code>sudo systemctl status auditd</code> 获取审计服务的状态。在添加规则之前，需要确保审计内核模块和审计服务正常。</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十月 25, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/touchscreen-calibration/" class="link black dim">
        触摸屏校正
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>有些设备的触摸屏不准，需要校正后才能正常使用。校正实际上就是配置设备在 <code>Xorg</code> 中的属性，具体属性名与驱动相关，后文描述。</p>
<p>下面开始介绍校正方法：</p>
<h2 id="准备">准备</h2>
<p>安装需要用到的工具：</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        八月 6, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/linux-kernel-compile/" class="link black dim">
        Compile Kernel
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>最近由于要调试 <code>usbhid</code> 模块，所以需要编译 <code>kernel</code> ，在此整理下方法，以免每次都查找。</p>
<h2 id="dependencies">Dependencies</h2>
<ul>
<li>
<p><code>deepin</code></p>
<p><code>sudo apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev</code></p>
</li>
<li>
<p><code>archlinux</code></p>
<p><code>sudo pacman -S gcc ncurses bison flex openssl libelf elfutils</code></p>
</li>
</ul>
<p>若编译时有报错，请按照错误提示按照缺失的依赖。</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        八月 3, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/gsettings/" class="link black dim">
        GSettings
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><code>GSettings</code> 实际上是一套可使用多个 <code>storage backends</code> 的 <code>API</code> ，默认使用 <code>dconf</code> 作为 <code>backend</code> ，也可以使用 <code>keyfile</code> 作为 <code>backend</code> 。但由于 <code>gio</code> 提供了 <code>GKeyFile</code> 结构来处理 <code>keyfile</code> 文件，所以解析 <code>keyfile</code> 文件时很少通过 <code>GSettings API</code> ，在这里只介绍使用 <code>dconf</code> 作为 <code>backend</code> 的使用方法。</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        五月 8, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/linux_hardware_info/" class="link black dim">
        Linux 硬件信息获取
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>在 <code>linux</code> 上可以通过 <code>dmidecode</code> 或是 <code>lshw</code> 来获取硬件信息，能够方便的查看系统配置。但它们的输出信息过多，解析起来有些麻烦，另外 <code>lshw</code> 对 <code>usb</code> 接口的网卡支持不好，显示的信息不够，所以在此整理下通过读文件或是一些简单命令来获取硬件信息的方法。</p>
<h3 id="dmi"><strong>DMI</strong></h3>
<p>一般情况下内核默认加载了 <code>dmi sysfs</code> ，路径是 <code>/sys/class/dmi</code> 。里面包含了 <code>bios</code> ， <code>board</code> ， <code>product</code> 等信息。</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 21, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/jenkins-api-usage/" class="link black dim">
        Jenkins API 使用
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><code>Jenkins</code> 是一款流行的开源持续集成工具，可以用来做一些软件开发的自动化工作，如打包，测试，自动部署等。</p>
<p><code>Jenkins</code> 中有 <code>view</code> 和 <code>job</code> 的概念， <code>view</code> 相当于组， <code>job</code> 则是具体的任务。
<code>view</code> 下面可以创建 <code>job</code> ，但 <code>job</code> 可以不在任何 <code>view</code> 下。</p>
<p>这里主要介绍 <code>Jenkins</code> 提供的 <code>HTTP API</code> ，至于如何使用 <code>Jenkins</code> 请参看 <a href="https://jenkins.io/doc/">Jenkins User Documentation</a>。</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 21, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/docker-data-storage/" class="link black dim">
        更改 Docker 数据的存储目录
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><code>Docker</code> 安装后默认将数据存储在 <code>/var/lib/docker</code> 下，随着 <code>image</code> 和 <code>container</code> 的增多，会导致 <code>/</code> 分区的空间被用完，如果 <code>/</code> 分区特别大就请忽略这篇文章。</p>
<p>因此需要将一些软件的数据存储到空间大的分区，与 <code>/</code> 分区分开。不仅 <code>Docker</code> 需要这样处理，如 <code>mysql/postgresql</code> 等软件也需要这样处理。</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 21, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/docker-intro/" class="link black dim">
        Docker 使用简介
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><code>Docker</code> 是使用 <code>GoLang</code> 开发的开源容器引擎，可以方便的打包开发好的应用，然后分发到任意 <code>linux</code> 主机上。</p>
<p>与传统的虚拟机相比拥有以下优势：</p>
<ul>
<li>
<p>高效的系统资源利用率</p>
<p>由于不需要进行硬件虚拟和运行完整的操作系统等额外开销，无论是应用执行速度、内存损耗或者文件存储速度， <code>Docker</code> 都更加高效</p>
</li>
<li>
<p>更快的启动速度</p>
<p><code>Docker</code> 容器应用直接运行与宿主内核，无需启动完整的操作系统，可以做到秒级启动</p>
</li>
</ul>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 13, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/influxdb-introduction/" class="link black dim">
        InfluxDB 简介
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><code>InfluxDB</code> 是一个时间序列数据库(<code>TSDB</code>), 被设计用来处理高写入、高查询负载，是 <a href="https://www.influxdata.com/time-series-platform/">TICK</a> 的一部分。</p>
<p><code>TSDB</code> 是针对时间戳或时间序列数据进行优化的数据库，专门为处理带有时间戳的度量和事件或度量而构建的。
而时间序列数据可以是随时间跟踪、监视、下采样和聚合的度量或事件，如服务器指标、应用程序性能、网络数据、传感器数据以及许多其他类型的分析数据。</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 11, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/clean_invalid_branch_in_git/" class="link black dim">
        清理无用的 local branch
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>在开发新功能或修复 <code>bug</code> 时, 会从 <code>master</code> 上新建 <code>branch</code> 来处理, 当完成后会将这个 <code>branch</code> 推送到 <code>origin</code> 中, 如:
<code>git push origin &lt;branch name&gt;:&lt;branch name&gt;</code>.</p>
<p><code>origin</code> 审核代码没有问题后就会 <strong>合并分支并删除</strong>, 但 <strong>本地</strong> 在 <code>git pull</code> 删除本地分支后, 仍能通过 <code>git branch -a</code> 看到这个 <code>branch</code> 的 <code>origin ref</code>.
日积月累之下本地就会有很多这样无用的 <code>branch ref</code>, 很是让人厌烦, 遂在此记录清理的方法.</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 5, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/mysql_commands/" class="link black dim">
        MySQL 常用命令
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>大学学的数据库系统概论工作后几年没有使用都已忘了, 现在项目需要用到数据库, 但来不及细看相关书籍了, 遂将一些常用的记录下来.</p>
<h2 id="常用类型">常用类型</h2>
<p><code>MySQL</code> 支持多种类型, 大致可以分为三类: 数值, 日期/时间和字符串(字符)类型, 大致如下:</p>
<ul>
<li>
<p>数值类型</p>
<ul>
<li>整数: <code>tinyint</code>, <code>smallint</code>, <code>mediumint</code>, <code>int</code>, <code>bigint</code></li>
<li>浮点数: <code>float</code>, <code>double</code>, <code>decimal</code></li>
</ul>
</li>
<li>
<p>日期和时间</p>
<p><code>date</code>, <code>time</code>, <code>datetime</code>, <code>timestamp</code>, <code>year</code></p>
</li>
<li>
<p>字符串类型</p>
<ul>
<li>字符串: <code>char</code>, <code>varchar</code></li>
<li>文本: <code>tinytext</code>, <code>text</code>, <code>mediumtext</code>, <code>longtext</code></li>
<li>二进制字符串: <code>tinyblob</code>, <code>blob</code>, <code>mediumblob</code>, <code>longblob</code></li>
</ul>
</li>
</ul>
<p>下面将详细给出每种类型的大小和描述.</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        二月 2, 2019
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/hugo-github/" class="link black dim">
        使用 hugo 写博客
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><a href="https://github.com/gohugoio/hugo">hugo</a> 是由 <code>Go</code> 语言实现的静态网站生成器, 简单、易用、高效、易扩展、快速部署。</p>
<h2 id="安装">安装</h2>
<p>到 <a href="https://github.com/gohugoio/hugo/releases">Release</a> 下载对应系统的二进制文件压缩包, 然后解压, 并把得到的二进制复制到 <code>Path</code> 中.</p>
<h2 id="简单使用">简单使用</h2>
<h3 id="创建一个站点">创建一个站点</h3>
<p>使用命令 <code>hugo new site &lt;dir&gt;</code> 来创建站点, 创建后的结构如下:</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十二月 5, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/gorm-association/" class="link black dim">
        gorm 关联查询
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>定义了一个 <code>User</code> 和 <code>Company</code>, <code>User</code> 中可以包含多个 <code>Company</code>, 如下:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-go" data-lang="go"><span style="display:flex;"><span><span style="color:#66d9ef">type</span> <span style="color:#a6e22e">User</span> <span style="color:#66d9ef">struct</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">ID</span>        <span style="color:#66d9ef">int</span>        <span style="color:#e6db74">`gorm:&#34;TYPE:int(11);NOT NULL;PRIMARY_KEY;INDEX&#34;`</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">Name</span>      <span style="color:#66d9ef">string</span>     <span style="color:#e6db74">`gorm:&#34;TYPE: VARCHAR(255); DEFAULT:&#39;&#39;;INDEX&#34;`</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">Companies</span> []<span style="color:#a6e22e">Company</span>  <span style="color:#e6db74">`gorm:&#34;FOREIGNKEY:UserId;ASSOCIATION_FOREIGNKEY:ID&#34;`</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">CreatedAt</span> <span style="color:#a6e22e">time</span>.<span style="color:#a6e22e">Time</span>  <span style="color:#e6db74">`gorm:&#34;TYPE:DATETIME&#34;`</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">UpdatedAt</span> <span style="color:#a6e22e">time</span>.<span style="color:#a6e22e">Time</span>  <span style="color:#e6db74">`gorm:&#34;TYPE:DATETIME&#34;`</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">DeletedAt</span> <span style="color:#f92672">*</span><span style="color:#a6e22e">time</span>.<span style="color:#a6e22e">Time</span> <span style="color:#e6db74">`gorm:&#34;TYPE:DATETIME;DEFAULT:NULL&#34;`</span>
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">type</span> <span style="color:#a6e22e">Company</span> <span style="color:#66d9ef">struct</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">gorm</span>.<span style="color:#a6e22e">Model</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">Industry</span> <span style="color:#66d9ef">int</span>    <span style="color:#e6db74">`gorm:&#34;TYPE:INT(11);DEFAULT:0&#34;`</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">Name</span>     <span style="color:#66d9ef">string</span> <span style="color:#e6db74">`gorm:&#34;TYPE:VARCHAR(255);DEFAULT:&#39;&#39;;INDEX&#34;`</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">Job</span>      <span style="color:#66d9ef">string</span> <span style="color:#e6db74">`gorm:&#34;TYPE:VARCHAR(255);DEFAULT:&#39;&#39;&#34;`</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">UserId</span>   <span style="color:#66d9ef">int</span>    <span style="color:#e6db74">`gorm:&#34;TYPE:int(11);NOT NULL;INDEX&#34;`</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十一月 7, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/how-to-solved-origin-changed-apt-error/" class="link black dim">
        怎么处理 &#39;Origin&#39;值从&#39;Google, Inc.&#39;修改到了&#39;Google LLC&#39; 的 APT 错误
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>今天在执行 <code>sudo apt-get update</code> 出现了下面的错误提示：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>E: 仓库<span style="color:#e6db74">&#39;http://dl.google.com/linux/chrome/deb stable Release&#39;</span>将其<span style="color:#e6db74">&#39;Origin&#39;</span>值从<span style="color:#e6db74">&#39;Google, Inc.&#39;</span>修改到了<span style="color:#e6db74">&#39;Google LLC&#39;</span>
</span></span><span style="display:flex;"><span>N: 为了让这个仓库能够应用，这必须在更新之前显式接受。更多细节请参阅 apt-secure<span style="color:#f92672">(</span>8<span style="color:#f92672">)</span> 手册。
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 英语环境下的输出</span>
</span></span><span style="display:flex;"><span>E: Repository ‘http://dl.google.com/linux/chrome-remote-desktop/deb stable Release’ changed its ‘Origin’ value from ‘Google, Inc.’ to ‘Google LLC’
</span></span><span style="display:flex;"><span>N: This must be accepted explicitly before updates <span style="color:#66d9ef">for</span> this repository can be applied. See apt-secure<span style="color:#f92672">(</span>8<span style="color:#f92672">)</span> manpage <span style="color:#66d9ef">for</span> details.
</span></span></code></pre></div><p>这个错误导致无法升级系统，错误说明了原因：是由于 <code>Google Chrome</code> 的 <code>Origin</code> 改变引起的，也给出了解决思路：手动接受这个改变。</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十月 23, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/set-appearance-in-deepin-or-gnome/" class="link black dim">
        linux 下 deepin 和 gnome 桌面的外观设置
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>桌面的外观设置一般包括窗口主题、图标主题、光标主题和字体设置，其中窗口主题就是常见的 <code>gtk</code> 主题，字体设置又包括标准字体、等款字体和字体大小。对于进些年的高分屏，又添加了字体缩放和窗口缩放这2个选项。</p>
<p>界面上设置方法就不介绍了，都可以在各自桌面的控制中心中找到，这里主要介绍命令行下的。</p>
<p><code>deepin</code> 和 <code>gnome</code> 桌面环境的外观配置数据是使用 <code>gsettings</code> 来存储，所以可以通过 <code>gsettings</code> 来设置和读取。 <code>gsettings</code> 相比设置界面就是 可以设置到更多的选项，设置的值更加精确。</p>
<p>下面先简单介绍下 <code>gsettings</code> 的用法。</p>
<h2 id="gsettings"><code>GSettings</code></h2>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十月 21, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/linux-auto-suspend/" class="link black dim">
        Linux 休眠自动唤醒
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>最近做无线网络在系统多次休眠唤醒后是否正常的测试，但每次休眠后都需要手动点击键盘来唤醒系统，显而易见的这种方法需要人来值守，很不放便。</p>
<p>此时便想是否有做自动唤醒的程序，毕竟这种需求也挺正常的，应该有人已经做过了。因此就开始查找自动唤醒的方法，果然就发现了 <code>rtcwake</code> 这个程序，这个程序是让系统进入休眠模式并在指定的时间后唤醒。立刻便觉得这个程序很神奇，然后就去看它的源码来找出它的实现方式，这边发现了本文的主题 <code>RTC</code> 子系统。</p>
<h2 id="rtc-子系统"><code>RTC</code> 子系统</h2>
<p><code>RTC</code> 子系统在目录 <code>/sys/class/rtc/</code> 下，会根据设备创建对应的目录，需要在内核中开启支持，配置如下：</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        八月 27, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/linux-time-standard/" class="link black dim">
        Linux 时间标准
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <h2 id="系统如何设置时间">系统如何设置时间</h2>
<ol>
<li>开机时根据硬件时钟来设置系统时钟.</li>
<li>如果开启了 <code>NTP</code> 服务, 会根据网络时间来校正系统时钟，确保时间准确.</li>
<li>关机时会根据系统时钟来设置硬件时钟(<code>localtime</code> 标准除外).</li>
</ol>
<h3 id="时钟">时钟</h3>
<ul>
<li>硬件时钟: 即实时时钟 <code>RTC</code> 或 <code>CMOS</code> 时钟, 仅能保存年、月、日、时、分、秒这些时间数值，无法保存时间标准和是否使用夏令时调节.</li>
<li>系统时钟: 即软件时间, 与硬件时间分别维护，保存了时间、时区和夏令时设置.初始系统时钟是从硬件时间计算得来，计算时会考虑 <code>/etc/adjtime</code> 的设置.</li>
<li><code>/etc/adjtime</code>: 这个文件中记录了时区标准和时间偏移, 根据硬件时钟设置系统时间和设置硬件时钟都会根据时间偏移来计算的.所有的时钟都是有误差的，但是一般有固定的偏移, 这种于基值的差称为“time skew”或“时间偏移”.</li>
</ul>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        七月 27, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/fixed-superblock/" class="link black dim">
        修复 superblock
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>本周去某公司调试系统，他们硬件测试部分送来了一台系统无法进入的机器，他们也不知道怎么弄得，让我看下是系统原因还是 <code>SSD</code> 硬件有问题。</p>
<p>拿到机器开机后，没有正常的进入系统，直接进入了 <code>initramfs mode</code> 并有 <code>filesystem invalid superblock checksum error</code> 的错误提示，遂告诉他们是系统的 <code>filesystem</code> 挂了，然后开始查找修复方法，最后找到了方法并修复了机器，在此记录一下。</p>
<h2 id="修复方法">修复方法</h2>
<p>下面的命令都是在 <code>initramfs shell</code> 中执行的。</p>
<h3 id="先确定你系统所在的分区">先确定你系统所在的分区</h3>
<p>可以执行 <code>lsblk</code> 来查看分区信息，然后确定，假如是 <code>/dev/sdaX</code></p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        五月 10, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/restful-introduction/" class="link black dim">
        RESTful 简介
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <h2 id="简介">简介</h2>
<p><code>RESTful</code> 即表现层状态转换，是一种设计风格，不是标准。其要点如下：</p>
<ul>
<li>
<p>资源由 <code>URI</code> 来指定</p>
<p>每个资源都有与之对应的 <code>URI=，一个 =URI</code> 只能对应一种资源，但一种资源可以对应多个 <code>URI</code> 不同的分类方法)。</p>
</li>
<li>
<p>对资源的操作对应到 <code>HTTP</code> 协议提供的方法</p>
<p>如增删改查等操作，对应 <code>HTTP</code> 协议的 <code>POST, DELETE, PUT, GET</code> 等方法</p>
</li>
<li>
<p>资源的表现形式通常广泛流行的协议和标准</p>
<p>如 <code>JSON, XML, HTML</code> 等格式，当然也可以是其它格式或者私有格式，但一定足够能描述自己</p>
</li>
<li>
<p>通过操作资源的表现形式来操作资源</p>
<p>通过修改表现形式再辅以 <code>HTTP</code> 协议的方法，应用就可以管理资源</p>
</li>
<li>
<p>以超媒体作为应用状态的引擎</p>
<p>资源相关操作的 <code>URI</code> 可附加在表现形式内，应用根据自身状态选择相应的 <code>URI</code> 来更改状态。</p>
<p>操作可以是 <code>URI</code> 外，也可以是一段代码，让应用执行。</p>
</li>
</ul>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 12, 2018
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/git-rebase/" class="link black dim">
        Git Rebase 回退
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>在开发新功能或修复 <code>bug</code> 时，一般需要新建一个分支，然后在它之上进行开发。在多人协同开发时，经常会同时修改相同的分支或相同的文件，这时就需要进行 <code>rebase</code> 操作在提交你的代码之前。</p>
<p>但有时 <code>rebase</code> 会带来不想要的提交，或处理冲突时误操作执行了 <code>git rebase --skip</code> 。此时就想要回退到之前的提交，恢复自己的数据， <code>reflog</code> 就可以帮助你完成数据恢复。</p>
<h2 id="reflog">reflog</h2>
<p>当你工作时，=Git= 会在你每次修改了 <code>HEAD</code> 时悄悄地将改动记录下来。当你提交或修改分支时， <code>reflog</code> 就会更新。通过 <code>git reflog</code> 命令可以查看当前的状态：</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十一月 20, 2017
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/bluetooth-faq/" class="link black dim">
        Bluetooth FAQ
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>收集遇到的 <code>bluetooth</code> 问题，使用的是 <code>deepin</code> 。</p>
<h2 id="控制中心不显示蓝牙模块">控制中心不显示蓝牙模块</h2>
<p>蓝牙模块不显示时，可以按照以下步骤来查找原因：</p>
<ol>
<li>执行 <code>sudo dmesg|grub bluetooth</code> 查看输出结果
<ul>
<li>
<p>输出里有 <code>timeout</code></p>
<p>此时再用 <code>systemctl status bluetooth.service</code> 看下服务有没有正常启动，错误信息是什么，然后根据错误去网上搜索答案。</p>
<p>如果蓝牙是由网卡提供的，此时可以试着开关一下网卡的硬件开关。因为内核在初始化网卡之前初始化蓝牙，就会导致蓝牙设备不可用，重新初始化一次就好了。
如果还是无效那就重启进入 <code>window</code> ，再 <code>window</code> 里开关一次蓝牙再重启到 <code>linux</code> 。</p>
</li>
<li>
<p>输出里无 <code>timeout</code></p>
<p>这就表明初始化没问题，继续下一步</p>
</li>
</ul>
</li>
</ol>
<hr>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        七月 29, 2017
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/set-grup2-resolution/" class="link black dim">
        设置 Grub2 分辨率
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <h2 id="背景">背景</h2>
<p>平时经常用显示器的分辨率去设置 <code>Grub</code> 的分辨率，虽然大部分都没有问题，但有时却没有用。所以就把 <code>Grub</code> 分辨率的设置方法详细说明一下，留档记录。</p>
<h2 id="查询支持的分辨率">查询支持的分辨率</h2>
<p>在设置 <code>Grub</code> 分辨率之前，需要先知道支持的分辨率列表，而幸运的是可以到 <code>Grub</code> 命令行查询。</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        七月 20, 2017
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/tcp-bbr/" class="link black dim">
        TCP BBR
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <h2 id="启用-bbr">启用 BBR</h2>
<p><code>BBR</code> 是在 4.9 以后的内核才开始支持的, 可以试着执行 <code>sudo modprobe tcp_bbr</code> 来确定是否支持, 没有输出就意味着支持, 将下面两行内容添加到 <code>/etc/sysctl.conf</code> 文件里开启用它:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>net.core.default_qdisc <span style="color:#f92672">=</span> fq
</span></span><span style="display:flex;"><span>net.ipv4.tcp_congestion_control <span style="color:#f92672">=</span> bbr
</span></span></code></pre></div><p>使用 <code>sysctl net.ipv4.tcp_available_congestion_control</code> 查看支持的算法, 用 <code>sysctl net.ipv4.tcp_congestion_control</code> 查看当前使用的算法.</p>
<p>如果这个模块不会自动加载, 需要把 <code>tcp_bbr_powered</code> 添加到 <code>/etc/modules-load.d/modules.conf</code> 中.
另外测试发现, 有时 <code>sysctl.conf</code> 里的设置并不会应用, 需要手动执行一下, 因此便写了 <code>reload-sysctl.service</code> 来做这个, <code>systemctl enable</code> 这个服务后, 一切就 OK 了.</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        七月 17, 2017
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/leanote-installation/" class="link black dim">
        Leanote Installation
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p><code>Leanote</code> 是一款开源的笔记软件, 支持使用 <code>markdown</code> 来编辑笔记, 并可选择是否将笔记导出成博客, 这对于知识整理及写博客都是非常方便的, 故来尝试下.</p>
<h2 id="安装">安装</h2>
<p><code>Leanote</code> 是使用 <code>Golang</code> 编写的, 可以直接使用官方编译好的可执行文件.
另外它使用的是 <code>mongodb</code> 数据库, 可以从源里安装, 也可以从官网下载.
以下的安装和配置都是基于最新的版本, 如果中途出错, 请看官方文档.</p>
<ul>
<li>
<p><code>Leanote</code> 下载地址: <a href="http://leanote.org/#download">见这里</a></p>
</li>
<li>
<p><code>mongodb</code> 下载地址: <a href="https://www.mongodb.com/download-center">见这里</a></p>
</li>
</ul>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十二月 27, 2016
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/openvpn-installation/" class="link black dim">
        OpenVPN Installation
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <h2 id="安装所需软件">安装所需软件</h2>
<p>Arch: <code>yaourt -S openvpn easy-rsa</code></p>
<h2 id="生成证书">生成证书</h2>
<h3 id="server-端">Server 端</h3>
<ul>
<li>Copy template file</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>sudo mkdir -p /etc/openvpn
</span></span><span style="display:flex;"><span>sudo cp -R /etc/easy-rsa /etc/openvpn
</span></span></code></pre></div><ul>
<li>Config vars</li>
</ul>
<p>取消并修改以下项:</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        十二月 14, 2016
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/mime-usage/" class="link black dim">
        MIME Usage
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <h2 id="基本使用">基本使用</h2>
<p>使用到的工具为: <code>xdg-mime, gvfs-mime</code></p>
<ul>
<li>
<p>查询文件的类型</p>
<p>使用 <code>xdg-mime query filetype &lt;filepath&gt;</code> 可以得到文件的类型</p>
</li>
<li>
<p>查询默认程序</p>
<p>使用 <code>xdg-mime query default text/plain</code> 或 <code>gvfs-mime --query &lt;mimetype&gt;</code>, <code>gvfs-mime</code> 还会列出支持此 <code>mimetype</code> 的所有程序</p>
</li>
<li>
<p>设置默认程序</p>
<p>如将 <code>text/plain</code> 的默认打开程序设置为 <code>gvim.desktop</code>, 可以执行 <code>xdg-mime default gvim.desktop text/plain</code> 或 <code>gvfs-mime --set text/plain gvim.desktop</code></p>
</li>
</ul>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 25, 2016
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/enable-coredump/" class="link black dim">
        Enable Coredump
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <h2 id="简介">简介</h2>
<p>当一个程序崩溃时会产生一个 <code>core</code> 文件, 里面记录了这个程序崩溃的原因, 这些信息对于开发者是很有用的.</p>
<p>但是 <code>core dumps</code> 在大多数 <code>linux</code> 上是被禁用的, 下面就介绍下如何开启这个功能.</p>
<h2 id="开启">开启</h2>
<p>可以通过 <code>ulimit -c</code> 的输出知道此功能是否开启, 输出为 <code>0</code> 表示禁用, 否则为开启.</p>
<h3 id="临时开启">临时开启</h3>
<p>通过 <code>ulimit -c unlimited</code> 命令来开启 <code>coredump</code> 功能, 它会程序运行的当前目录生成一个 <code>core</code> 文件, 新的 <code>core</code> 会覆盖旧的.</p>
<p>通过可以修改 <code>/proc/sys/kernel/core_uses_pid</code> 文件内容为 <code>1</code> 来生成以 <code>pid</code> 作为扩展名的 <code>core</code> 文件.</p>
<p>通过修改 <code>/proc/sys/kernel/core_pattern</code> 可以修改 <code>core</code> 文件的保存位置和格式. 如把内容改为 <code>/tmp/core-%e-%p-%t</code>, 就表示把 <code>core</code> 文件保存到 <code>/tmp</code> 目录下, 文件名的格式为 <code>core-命令名-pid-时间戳</code> .</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        四月 22, 2016
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/auto-hidden-cursor/" class="link black dim">
        Auto Hidden Cursor
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>最近需要做一个隐藏光标的功能, 在这里将了解到的知识总结一下.</p>
<h2 id="原理">原理</h2>
<p>隐藏光标的原理就是把光标设置为一个 <code>x11 null cursor</code>, 不需要隐藏时再将它设为 <code>x11 left_ptr cursor</code>.</p>
    </div>
  </div>

        </div>
      
        <div class="relative w-100  mb4 bg-white">
            <div class="mb3 pa4 mid-gray overflow-hidden">
    
      <div class="f6">
        七月 4, 2014
      </div>
    
    <h1 class="f3 near-black">
      <a href="/post/build-vpn/" class="link black dim">
        在 VPS 中搭建 VPN 服务器
      </a>
    </h1>
    <div class="nested-links f5 lh-copy nested-copy-line-height">
      <p>最近 <code>Google</code> 被封，而用 <code>Goagent</code> 做代理进行访问的效果而不是很理想，所以就想去买 <code>VPN/VPS</code> . 几经考虑后，就去买了个便宜 <code>VPS</code> , 这样也就可以分享给家人用了。</p>
<p><code>VPS</code> 中安装的是 <code>Ubuntu=，所以搭建 =VPN</code> 服务器也就是在 <code>Ubuntu</code> 上面搭建，具体方法如下。</p>
<p>注意：下面所有的操作都是以 <code>root</code> 用户进行的，非 <code>root</code> 用户请在命令前加上 <code>sudo</code></p>
<p><strong>安装 <code>pptp</code></strong></p>
<p><code>apt-get install pptpd</code></p>
<p>配置 <code>IP</code> 地址范围及服务器 <code>IP</code></p>
<p><code>vi /etc/pptpd.conf</code></p>
<p>取消下面内容的注释</p>
    </div>
  </div>

        </div>
      
    </section>
  </div>

    </main>
    <footer class="bg-black bottom-0 w-100 pa3" role="contentinfo">
  <div class="flex justify-between">
  <a class="f4 fw4 hover-white no-underline white-70 dn dib-ns pv2 ph3" href="https://jouyouyun.github.io" >
    &copy;  jouyouyun 2023 
  </a>
    <div>
<div class="ananke-socials">
  
    <a href="https://github.com/jouyouyun" target="_blank" class="github ananke-social-link link-transition stackoverflow link dib z-999 pt3 pt0-l mr1" title="GitHub link" rel="noopener" aria-label="follow on GitHub——Opens in a new window">
      
        <span class="icon"><svg style="enable-background:new 0 0 512 512;" version="1.1" viewBox="0 0 512 512"  xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
  <path d="M256,32C132.3,32,32,134.8,32,261.7c0,101.5,64.2,187.5,153.2,217.9c11.2,2.1,15.3-5,15.3-11.1   c0-5.5-0.2-19.9-0.3-39.1c-62.3,13.9-75.5-30.8-75.5-30.8c-10.2-26.5-24.9-33.6-24.9-33.6c-20.3-14.3,1.5-14,1.5-14   c22.5,1.6,34.3,23.7,34.3,23.7c20,35.1,52.4,25,65.2,19.1c2-14.8,7.8-25,14.2-30.7c-49.7-5.8-102-25.5-102-113.5   c0-25.1,8.7-45.6,23-61.6c-2.3-5.8-10-29.2,2.2-60.8c0,0,18.8-6.2,61.6,23.5c17.9-5.1,37-7.6,56.1-7.7c19,0.1,38.2,2.6,56.1,7.7   c42.8-29.7,61.5-23.5,61.5-23.5c12.2,31.6,4.5,55,2.2,60.8c14.3,16.1,23,36.6,23,61.6c0,88.2-52.4,107.6-102.3,113.3   c8,7.1,15.2,21.1,15.2,42.5c0,30.7-0.3,55.5-0.3,63c0,6.1,4,13.3,15.4,11C415.9,449.1,480,363.1,480,261.7   C480,134.8,379.7,32,256,32z"/>
</svg>
</span>
      
<span class="new-window"><svg  height="8px"  style="enable-background:new 0 0 1000 1000;" version="1.1" viewBox="0 0 1000 1000"  xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
<path d="M598 128h298v298h-86v-152l-418 418-60-60 418-418h-152v-86zM810 810v-298h86v298c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-596c0-46 38-86 86-86h298v86h-298v596h596z" style="fill-rule:evenodd;clip-rule:evenodd;"/>
</svg>
</span></a>
  
</div>
</div>
  </div>
</footer>

  </body>
</html>
